package com.orangelife.service.propFeeAccount;

import java.util.List;
import java.util.Map;

import com.orangelife.exception.AppBizException;
import com.orangelife.service.propFeeAccount.model.AmountHandleDto;
import com.orangelife.service.propFeeAccount.model.PropFeeAccountDto;

/*****************************************************************
 * Copyright(C) ORANGELIFE Corporation 2015. All Rights Reserved.
 *****************************************************************/
/*
 * ============================================================== 功能名
 * PropFeeAccount类的 service层的增删改查
 * 
 * @author @author zhr
 * 
 * @version 1.1.0
 * 
 * @date 2016-06-23 17:31:23
 * ==============================================================
 */
public interface IPropFeeAccountService {

	/**
	 * 用途 添加propFeeAccount（橙子生活）
	 * 
	 * @author zhr
	 * @date创建时间 2016-06-23 17:31:23
	 * @param propFeeAccount
	 * @return
	 * @throws AppBizException
	 */
	public int addPropFeeAccount(PropFeeAccountDto propFeeAccount)
			throws AppBizException;

	/***
	 * 批量添加
	 * 
	 * @param propFeeAccounts
	 * @return
	 * @throws AppBizException
	 */
	public int addPropFeeAccount(List<PropFeeAccountDto> propFeeAccounts)
			throws AppBizException;

	/**
	 * 用途 修改propFeeAccount（橙子生活）
	 * 
	 * @author zhr
	 * @date创建时间 2016-06-23 17:31:23
	 * @param propFeeAccount
	 * @return
	 * @throws AppBizException
	 */

	public int editPropFeeAccount(PropFeeAccountDto propFeeAccount)
			throws AppBizException;

	/****
	 * 增加 扣减金额
	 * 
	 * @param propFeeAccount
	 * @return
	 * @throws AppBizException
	 */
	public int editFeeAccount(PropFeeAccountDto propFeeAccount)
			throws AppBizException;

	/**
	 * 用途 单个查询 （橙子生活）
	 * 
	 * @author ztw
	 * @date创建时间 2016-06-23 17:31:23
	 * @param propFeeAccountID
	 * @return
	 * @throws AppBizException
	 */

	public PropFeeAccountDto findPropFeeAccountByID(String propFeeAccountID)
			throws AppBizException;

	/**
	 * 用途根据房屋信息查询账户信息
	 * 
	 * @author ztw
	 * @date创建时间 2016-06-23 17:31:23
	 * @param apartmentID
	 * @return
	 * @throws AppBizException
	 */

	public PropFeeAccountDto findAccountByApartID(String apartmentID)
			throws AppBizException;

	/**
	 * 获取房屋账户，没有就创建
	 * 
	 * @author ztw
	 * @date创建时间 2016-06-23 17:31:23
	 * @param apartmentID
	 * @return
	 * @throws AppBizException
	 */

	public PropFeeAccountDto getAccountByApartID(String apartmentID)
			throws AppBizException;

	/**
	 * 房屋账户扣减金额
	 * 
	 * @author ztw
	 * @date创建时间 2016-06-23 17:31:23
	 * @param apartmentID
	 * @return
	 * @throws AppBizException
	 */

	public int handleAccount(AmountHandleDto amountHandle)
			throws AppBizException;

	/***
	 * 处理负数的
	 * 
	 * @param amountHandle
	 * @return
	 * @throws AppBizException
	 */
	public int handleAccountInfo(AmountHandleDto amountHandle)
			throws AppBizException;

	/**
	 * 用途 逻辑删除（橙子生活）
	 * 
	 * @author ztw
	 * @date创建时间 2016-06-23 17:31:23
	 * @param propFeeAccountID
	 * @return
	 * @throws AppBizException
	 */
	public int deletePropFeeAccountByLogic(String propFeeAccountID)
			throws AppBizException;

	/**
	 * 用途 查询列表 （橙子生活）
	 * 
	 * @author
	 * @date 创建时间 2016-07-31 16:45:04
	 * @param search
	 *            搜索内容
	 * @param tsCreate
	 *            创建时间
	 * @param pageNo
	 *            页码
	 * @param pageSize
	 *            页面大小
	 * @return
	 * @throws AppBizExceptionception
	 */
	public List<Map<String, Object>> findPropFeeAccountByPage(String commID,
			String tsCreate, String search, int pageNo, int pageSize)
			throws AppBizException;

	/**
	 * 用途 查询列表（返回对对象）（橙子生活）
	 * 
	 * @author
	 * @date 创建时间 2016-07-31 16:45:04
	 * @param servletRequest
	 * @param search
	 *            搜索内容
	 * @param tsCreate
	 *            创建时间
	 * @param pageNo
	 *            页码
	 * @param pageSize
	 *            页面大小
	 * @return
	 * @throws AppBizException
	 */
	public List<PropFeeAccountDto> getPropFeeAccountByPage(String tsCreate,
			String search, int pageNo, int pageSize) throws AppBizException;

	/**
	 * 用途 根据一张表内的所有ID查询propFeeAccount（橙子生活）(返回Map<String, Object>)
	 * 
	 * @author
	 * @date 创建时间 2016-07-31 16:45:04
	 * @param accountID
	 *            (非必填字段)
	 * 
	 * @param apartmentID
	 *            (非必填字段)
	 * 
	 * @param status
	 *            (非必填字段)
	 * @return
	 * @throws AppBizException
	 */

	public List<Map<String, Object>> selectPropFeeAccountByRelevantID(
			String accountID, String apartmentID, String status)
			throws AppBizException;

	/**
	 * 用途 根据一张表内的所有ID查询propFeeAccount（橙子生活）(返回对象)
	 * 
	 * @author
	 * @date 创建时间 2016-07-31 16:45:04
	 * @param accountID
	 *            (非必填字段)
	 * 
	 * @param apartmentID
	 *            (非必填字段)
	 * 
	 * @param status
	 *            (非必填字段)
	 * @return
	 * @throws AppBizException
	 */

	public List<PropFeeAccountDto> findPropFeeAccountByRelevantID(
			String accountID, String apartmentID, String status,String accounType)
			throws AppBizException;

	/**
	 * 用途 批量查询propFeeAccount（橙子生活）(返回对象)
	 * 
	 * @author
	 * @date 创建时间 2016-07-31 16:45:04
	 * 
	 * @return
	 * @throws AppBizException
	 */

	public List<PropFeeAccountDto> bauthfindPropFeeAccount(
			List<String> propFeeAccountIDs) throws AppBizException;

	/**
	 * 用途 批量查询propFeeAccount（橙子生活）(返回Map)
	 * 
	 * @author
	 * @date 创建时间 2016-07-31 16:45:04
	 * 
	 * @return
	 * @throws AppBizException
	 */

	public List<Map<String, Object>> bauthfindPropFeeAccountByMap(
			Map<String, Object> propFeeAccount) throws AppBizException;

	/**
	 * 用途 清除
	 * 
	 * @author
	 * @date 创建时间 2016-07-31 16:45:04
	 * 
	 * @return
	 * @throws AppBizException
	 */

	public void clearCache() throws AppBizException;

	/***
	 * 根据房屋查询房屋信息
	 * 
	 * @param houseInfo
	 * @return
	 * @throws AppBizException
	 */
	public List<Map<String, Object>> getApaptMentInfoByName(
			Map<String, Object> houseInfo) throws AppBizException;

	/***
	 * 查询
	 * 
	 * @param commID
	 * @param apartmentType
	 * @param searchType
	 * @param search
	 * @param startTime
	 * @param pageNo
	 * @param pageSize
	 * @return
	 * @throws AppBizException
	 */
	public List<Map<String, Object>> getAllPropFeeAccountInfo(String commID,
			String apartmentType, String searchType, String search,
			String startTime, int pageNo, int pageSize) throws AppBizException;

	public List<Map<String, Object>> getAllPropFeeAccountInfo(String commID,
			String apartmentType, String searchType, String search,
			String startTime) throws AppBizException;

	/**
	 * 
	 * @param commID
	 * @param apartmentType
	 * @param searchType
	 * @param search
	 * @param startTime
	 * @return
	 * @throws AppBizException
	 */
	public Map<String, Object> getSumAccountInfo(String commID,
			String apartmentType, String searchType, String search,
			String startTime) throws AppBizException;

	public List<Map<String, Object>> getAountInfoHasMoney(String commID)
			throws AppBizException;

	public PropFeeAccountDto addPropFeeLog(PropFeeAccountDto propFeeAccount,
			PropFeeAccountDto oldPropFeeAccount) throws AppBizException;

	public PropFeeAccountDto handleAccountLog(AmountHandleDto amountHandleDto,
			PropFeeAccountDto oldPropFeeAccount) throws AppBizException;
}
